【從零開始的 C 語言筆記】第二十八篇-Struct的介紹與應用 您所在的位置:网站首页 typedef struct用法判断 【從零開始的 C 語言筆記】第二十八篇-Struct的介紹與應用

【從零開始的 C 語言筆記】第二十八篇-Struct的介紹與應用

2023-05-22 18:50| 来源: 网络整理| 查看: 265

上一篇結束後我們就介紹了完整的變數生命週期了,也提到了區域變數、全域變數、自動變數、靜態變數的概念,對於寫程式來說搞懂變數的作用域是很重要的事情喔!

今天我們來介紹變數的組合技--「Struct」!

什麼是Struct?

到現在我們已經把單一變數的各種型態、作用域都介紹完成了,今天我們要來提到的是Struct(結構),Struct是一種自訂的資料型態,可以把不同的基本資料型態(int.float.double.char)變數組合,形成新的資料型態。

也許這樣說起來有一點籠統,不如我們來看下面的程式碼:

#include #include struct students{ int id; char name[20]; int chinese; int english; int math; int social; int science; }; int main() { struct students one; one.id = 1; strcpy(one.name, "張小美"); one.chinese = 77; one.english = 83; one.math = 86; one.social = 68; one.science = 91; printf("學生編號: %d\n", one.id); printf("姓名: %s\n", one.name); printf("國文成績: %d\n", one.chinese); printf("英文成績: %d\n", one.english); printf("數學成績: %d\n", one.math); printf("社會成績: %d\n", one.social); printf("自然成績: %d\n", one.science); return 0; }

https://ithelp.ithome.com.tw/upload/images/20211202/20142565EOiy65ub9z.png 可以看到在主函式外宣告了一個名為students的struct,而這個students中包含了int.char這些資料型態的變數,又與之前我們提過的陣列,都是同資料型態的樣子大不相同。

struct比較像是為了描述某個資料而自訂出來的,而為此我們會組合許多不同變數,如同資料表中會有許多不同欄位,但都是為了描述一筆一筆的資料而生。

正式使用 struct定義的種類

(1) 純粹定義struct

struct students{ int id; char name[20]; int chinese; int english; int math; int social; int science; };

https://ithelp.ithome.com.tw/upload/images/20211202/20142565AjKBh5TBDp.png 日後需使用struct時的變數宣告:

struct students someone;

(2) 定義struct的同時宣告變數

struct students{ int id; char name[20]; int chinese; int english; int math; int social; int science; }someone;

https://ithelp.ithome.com.tw/upload/images/20211202/20142565jCaqOFzUlR.png 日後使用時直接使用這個,已經被宣告好的變數someone就可以了。

(3) 定義struct也宣告struct別名

struct students{ int id; char name[20]; int chinese; int english; int math; int social; int science; } typedef struct students Student;

https://ithelp.ithome.com.tw/upload/images/20211202/20142565Vyz3CYqBmc.png 這樣我們就替這個新struct取好Student的別名了,日後使用時的變數宣告會變為:

Student someone;

(4) 在定義struct時直接取別名

typedef struct{ int id; char name[20]; int chinese; int english; int math; int social; int science; }Student;

https://ithelp.ithome.com.tw/upload/images/20211202/20142565dbKw99tQk3.png 日後的變數宣告:

Student someone;

(延伸閱讀:李山姆的部落格-typedef struct用法說明)

struct的使用 當我們要使用struct時,除了一樣要進行變數宣告外,我們要使用struct的成員時的用法,也與陣列有極大的不同。

(1) 變數宣告 與一般的變數宣告一樣,都是採取「資料型態 變數名稱;」的形式 (a) 無別名也未在結構宣告時同時宣告變數

struct students{ int id; char name[20]; int chinese; int english; int math; int social; int science; }; struct students someone;

https://ithelp.ithome.com.tw/upload/images/20211202/20142565ycYNQEdJWj.png

(b) 已定義別名

typedef struct { int id; char name[20]; int chinese; int english; int math; int social; int science; }Student; Student someone;

https://ithelp.ithome.com.tw/upload/images/20211202/20142565xh0ihY6PtC.png

(2) 取得、變更變數成員

one.id = 1; printf("學生編號: %d\n", one.id);

https://ithelp.ithome.com.tw/upload/images/20211202/2014256568TSnTauXO.png

實際應用 #include #include struct staffs{ int id; char name[20]; char gender; int age; char address[50]; }; int main() { struct staffs no1; no1.id = 1; strcpy(no1.name, "王小明"); no1.gender = 'm'; no1.age = 23; strcpy(no1.address, "xx市xx區xx里xx路xx號x樓"); struct staffs no2; no2.id = 2; strcpy(no2.name, "葉花花"); no2.gender = 'w'; no2.age = 26; strcpy(no2.address, "oo市oo區oo里oo路o號o樓"); printf("---列印員工資料---\n\n"); printf("員工編號: %d\n", no1.id); printf("姓名: %s\n", no1.name); printf("性別: "); if(no1.gender == 'm'){ printf("男\n"); } else if(no1.gender == 'w'){ printf("女\n"); } else{ printf("不詳\n"); } printf("年紀: %d\n", no1.age); printf("地址: %s\n", no1.address); printf("---列印員工資料---\n\n"); printf("員工編號: %d\n", no2.id); printf("姓名: %s\n", no2.name); printf("性別: "); if(no2.gender == 'm'){ printf("男\n"); } else if(no2.gender == 'w'){ printf("女\n"); } else{ printf("不詳\n"); } printf("年紀: %d\n", no2.age); printf("地址: %s\n", no2.address); return 0; }

https://ithelp.ithome.com.tw/upload/images/20211202/2014256544nqVV3bg2.png

小結

struct可以包含許多不同資料型態的成員。

在進行struct定義後,仍需進行變數宣告才可以使用。

在進行結構的變數宣告時,要注意資料型態是什麼、有沒有取別名。

看到這裡就大致介紹完struct了,不曉得大家有沒有辦法吸收進去呢?內容有使用到第十五篇介紹的string函式庫,大家如果有不了解的地方,可以多多嘗試或查其他資料! 下一篇我們來介紹c語言怎麼進行讀檔、寫檔!


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有